/****************************************************************************
**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation
**
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
**   * Redistributions of source code must retain the above copyright
**     notice, this list of conditions and the following disclaimer.
**   * Redistributions in binary form must reproduce the above copyright
**     notice, this list of conditions and the following disclaimer in
**     the documentation and/or other materials provided with the
**     distribution.
**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
**     the names of its contributors may be used to endorse or promote
**     products derived from this software without specific prior written
**     permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
 *    Description: Engine implementation for Audio Recorder example. 
 */

#include <e32std.h>
#include <f32file.h>
#include "audioengine.h"
#include "audiorecorder_p.h"

_LIT(KAudioFile, "c:\\sounds\\new.wav");

/*!
 * NewL() function of the class is used to create an instance of the audio engine.
 */

CAudioRecorderEngine* CAudioRecorderEngine::NewL(AudioRecorderPrivate* audioRecorderPvt)
{
    CAudioRecorderEngine* self = CAudioRecorderEngine::NewLC(audioRecorderPvt);
    CleanupStack::Pop(self);
    return self;
}

/*!
 * NewLC() function of the class is used to create an instance of the audio engine.
 */
CAudioRecorderEngine* CAudioRecorderEngine::NewLC(AudioRecorderPrivate* audioRecorderPvt)
{
    CAudioRecorderEngine* self = new (ELeave) CAudioRecorderEngine(audioRecorderPvt);
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;    
}


/*!
 * Initialize the member data.
 */
CAudioRecorderEngine::CAudioRecorderEngine(AudioRecorderPrivate* audioRecorderPvt):iAudioRecorderPvt(audioRecorderPvt)
{
}
/*!
 * close the file server, delete the recorder instance.
 */
CAudioRecorderEngine::~CAudioRecorderEngine()
{
    iFs.Close();
    iRecorderUtility->Close();
    delete iRecorderUtility;
}

/*! 
  * Construct the member data, sets volume and opens the file.
  */
void CAudioRecorderEngine::ConstructL()
{
    User::LeaveIfError(iFs.Connect());
    iRecorderUtility = CMdaAudioRecorderUtility::NewL(*this);
    //Set the volume of the recorder.
    iRecorderUtility->SetVolume(iRecorderUtility->MaxVolume()/2);
    // Open the file
    iRecorderUtility->OpenFileL(KAudioFile);
}

/*!
 * This call back function is called, when there is a state change in the recorder.
 * Opening a file, start recording, playing the recorded file.
 */
void CAudioRecorderEngine::MoscoStateChangeEvent(CBase* /*aObject*/, TInt /*aPreviousState*/, 
            TInt aCurrentState, TInt aErrorCode)
{
}

/*!
 * Playback the recorded file.
 */
void CAudioRecorderEngine::PlayL()
{
    TRAPD(err,iRecorderUtility->PlayL());
    if(err == KErrNone)
        {
        _LIT(KSuccess,"Play Back");
        iResponse = KSuccess;
        }
    else
        {
        _LIT(KFailure,"Playing the recording failed");
        iResponse = KFailure;
        }
    iAudioRecorderPvt->printResponse();
}

/*!
 * Stop the recording / audio playback.
 */
void CAudioRecorderEngine::Stop()
{
    iRecorderUtility->Stop();
    _LIT(KSuccess,"Stopped");
    iResponse = KSuccess;
    iAudioRecorderPvt->printResponse();   
}

/*!
 * This method is used to start the recording.
 */
void CAudioRecorderEngine::RecordL()
{
    TRAPD(err,iRecorderUtility->RecordL());
    if(err == KErrNone)
        {
        _LIT(KSuccess,"Recording started");
        iResponse = KSuccess;
        }
    else
        {
        _LIT(KFailure,"Starting recording failed");
        iResponse = KFailure;
        }
    iAudioRecorderPvt->printResponse();
}
// END OF FILE

